#!/usr/env/bin python
# -*- coding: utf-8 -*-

# @Time    : 2019/12/11 15:55|15:55
# @Author  : yangdingyi
# @File    : methods
# @Software: PyCharm


class AData:
    pass


class ABaseMethod:
    pass


class AMethod(ABaseMethod):
    """
    A类方法
    """
    def abs(self):
        """
        abs() 函数返回数字的绝对值。
           raise TypeError
        语法
            以下是 abs() 方法的语法:
                abs( x )
        参数
            x -- 数值表达式。
        返回值
            函数返回x（数字）的绝对值。
        """
        print('A.abs():')
        x_list = [
            123,
            -123,
            0,
            0.2,
            -0.0001,
            AData(),
            '123',
        ]
        for i, x in enumerate(x_list):
            try:
                print(' abs({})={}'.format(x, abs(x)))
            except Exception as e:
                print(' abs({}):[{}]{}'.format(x, e.__class__, e))
        print('A.abs()...end')

    def all(self):
        """
        all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE，如果是返回 True，否则返回 False。
        元素除了是 0、空、None、False 外都算 True。

        函数等价于：
            def all(iterable):
                for element in iterable:
                    if not element:
                        return False
                return True

        Python 2.5 以上版本可用。
        语法
            以下是 all() 方法的语法:
                all(iterable)
        参数
            iterable -- 元组或列表。
        返回值
            如果iterable的所有元素不为0、''、False或者iterable为空，all(iterable)返回True，否则返回False；
            注意：空元组、空列表返回值为True，这里要特别注意。
        """
        print('A.all():')
        data_list = [
            [123, 123, -123, '123', AData(), True],
            [0, 123, '123'],
            [None, 1],
            [False, '123'],
            ['', '123', 11, True]
        ]
        for i, data in enumerate(data_list):
            print(' all({})={}'.format(data, all(data)))
        print('A.all()...end')

    def any(self):
        """
        描述
            any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False，则返回 False，如果有一个为 True，则返回 True。
            元素除了是 0、空、FALSE 外都算 TRUE。
            函数等价于：
                def any(iterable):
                    for element in iterable:
                        if element:
                            return True
                    return False
            Python 2.5 以上版本可用。
        语法
            以下是 any() 方法的语法:
                any(iterable)
        参数
            iterable -- 元组或列表。
        返回值
            如果都为空、0、false，则返回false，如果不都为空、0、false，则返回true。
        """
        print('A.any():')
        data_list = [
            [123, 123, -123, '123', AData(), True],
            [0, 123, '123'],
            [None, 1],
            [False, '123'],
            ['', '123', 11, True],
            [0, None, False, ''],
        ]
        for i, data in enumerate(data_list):
            print(' any({})={}'.format(data, any(data)))
        print('A.any()...end')


a_method = AMethod()

a_method.abs()
a_method.all()
a_method.any()


class BMethod(ABaseMethod):
    """
    B类方法
    """
    def basestring(self):
        """
        python2
        描述
            basestring() 方法是 str 和 unicode 的超类（父类），也是抽象类，因此不能被调用和实例化，但可以被用来判断一个对象是否为 str 或者 unicode 的实例，isinstance(obj, basestring) 等价于 isinstance(obj, (str, unicode))。
        语法
            以下是 basestring() 方法的语法:
                basestring()
        参数
            无
        返回值
            无。
        """
        print('B.basestring():')
        # data_list = [
        #     'hello world',
        #     123,
        #     0.5,
        #     None,
        #     True,
        #     False
        # ]
        # for i, data in enumerate(data_list):
        #     print('isinstance({}, basestring)={}'.format(data, isinstance(data, basestring)))
        print(' python2...')
        print('B.basestring()...end')

